import { defineStore } from 'pinia'
import { checkLogin, getInfo, logout } from '@/api/user'
import { ElMessage } from 'element-plus'
import { useRouteStore } from '@/stores/route'

export const useUserStore = defineStore('userStore', {
  state() {
    return {
      isLogin: false,
      userInfo: {},
    }
  },
  actions: {
    // 用户退出
    async userLogout() {
      try {
        const { code } = await logout()
        if (code == 200) {
          ElMessage.success('退出成功')
          // 清空用户数据
          this.clearUserInfo()
          // 重置路由
          const routeStore = useRouteStore()
          routeStore.resetRoutes()
          return true
        }
        return false
      } catch (error) {
        console.error('退出失败', error)
        return false
      }
    },
    // 获取是否登录
    async checkUserLogin() {
      const { code } = await checkLogin()
      if (code == 200) {
        this.isLogin = true
        return true
      }
      return false
    },

    // 设置用户信息
    async getUserInfo() {
      const { code, data } = await getInfo()
      if (code == 200) {
        console.log(data)
        this.userInfo = data
        return data
      }
      return null
    },

    // 初始化用户信息，返回Promise以便在其他组件中等待完成
    async initInfo() {
      try {
        // 首先检查登录状态
        const isLoggedIn = await this.checkUserLogin()
        // 如果已登录，获取用户信息
        if (isLoggedIn) {
          await this.getUserInfo()
          return true
        }
        return false
      } catch (error) {
        console.error('初始化用户信息失败', error)
        return false
      }
    },
    // 清空数据
    clearUserInfo() {
      // 清除缓存
      this.isLogin = false
      this.userInfo = {}
      // 清空tags - 使用动态导入避免循环引用
      try {
        // 使用动态导入
        import('@/stores/tags')
          .then((module) => {
            const tagsStore = module.useTagsStore()
            tagsStore.clearTags()
          })
          .catch((error) => {
            console.error('清空标签失败:', error)
          })
      } catch (error) {
        console.error('清空标签失败:', error)
      }
    },
  },
  getters: {},
  persist: {
    key: 'user-store',
    storage: localStorage,
    paths: ['isLogin', 'userInfo'],
  },
})
